/*
 * Project:     My Project Work, Copyright (C) 2011
 * Created at:  01.08.2011
 */
package de.myprojectwork.model;

import de.myprojectwork.common.util.MyProjectWorkException;
import java.io.IOException;
import java.util.List;

/**
 * Stellt Methoden zur Verfügung, um die Datenbank zu erstellen, 
 * zu verändern oder zu löschen.
 * 
 * @author Chris Holdschuh
 */
public interface DataDefinitionModel {
    
    /**
     * Zeigt alle Tabellen.
     * 
     * @throws MyProjectWorkException 
     */
    List<String> showTables() throws MyProjectWorkException;
    
    /**
     * Löscht die komplette Datenbank physikalisch von der Festplatte.
     * 
     * @throws IOException 
     */
    void deleteDb() throws IOException, MyProjectWorkException;
    
    /**
     * Löscht eine Tabelle aus der Datenbank.
     * 
     * @param table Tabelle die gelöscht werden sollen. 
     * @throws MyProjectWorkException 
     */
    void deleteTable(Table table) throws MyProjectWorkException;
    
    /**
     * Löscht alle Tabellen in der richtigen Reihenfolge.
     * 
     * @throws MyProjectWorkException 
     */
    void deleteTables() throws MyProjectWorkException;
    
    /**
     * Löscht alle Einträge aus einer Tabelle. Die Tabelle bleibt dabei erhalten.
     * 
     * @param table Tabelle deren Einträge gelöscht werden sollen. 
     * @throws MyProjectWorkException 
     */
    void deleteEntries(Table table) throws MyProjectWorkException;
    
    /**
     * Erstellt die Sequenz der IDs.
     * 
     * @throws MyProjectWorkException 
     */
    void createSequence() throws MyProjectWorkException;
    
    /**
     * Löscht die Sequenz der IDs.
     * 
     * @throws MyProjectWorkException 
     */
    void deleteSequence() throws MyProjectWorkException;
    
    /**
     * Erstellt eine Tabelle.
     * 
     * @param table Tabelle die erstellt werden soll. 
     * @throws MyProjectWorkException 
     */
    void createTable(Table table) throws MyProjectWorkException;
    
    /**
     * Erstellt alle Tabellen in der richtigen Reihenfolge.
     * 
     * @throws MyProjectWorkException 
     */
    void createTables() throws MyProjectWorkException;
    
}
